\section{Software Verification}
\label{testing:uepvseep}
In order to ease the comparison of the different coding methods a strict setup is chosen to compare \ac{EEP} with \ac{UEP}, see Table \ref{tab:descriptio_comparison_setup}. As concluded in Chapter \ref{analysisofsolutions}, \ac{UEP} is only performed with \ac{EW}. The purpose of this test is to confirm that the implemented software behaves as foretold by the analysis and simulations made in Chapter \ref{analysisofsolutions}. Furthermore, the test will show whether the trade-offs made when going from \ac{EEP} to \ac{UEP} are the same in the implemented software using \verb|kodo|. 
Essentially, the goal is to replicate the decoding probability curves for \ac{EW} produced analytically in Figure \ref{fig:ew_analytic_dec} on Page \pageref{fig:ew_analytic_dec}. 

\begin{table}[h]
\centering
\begin{tabular}{ l | l }
Method & Characteristics\\ \hline
EEP & Generation size: 96\\ \hline
UEP & Generation size: 96\\
(Expanding & Layer 1: Size: 32, $\boldsymbol \Gamma_1$: 0.3 | 0.4 | 0.5 \\
Windows) & Layer 2: Size: 96, $\boldsymbol \Gamma_2$: 0.7 | 0.6 | 0.5 \\
%  & Layer 3: Size: 96, $\Gamma_3$: ...\\ \hline
\end{tabular}
\caption{Definition of all the characteristics of each coding method.}
\label{tab:descriptio_comparison_setup}
\end{table}

\newpage
\subsection{Testing Procedure}
Because this is a test of \ac{UEP} performance compared to \ac{EEP}, network behavior such as packet loss and delay is not wanted. Therefore, the test is done locally on one computer, to avoid any insecurities caused by the network. The software generates random data for a generation, and in the \ac{UEP}-case, splits the data into layers of sizes listed in Table \ref{tab:descriptio_comparison_setup}. Linear combinations are then created by the encoder, and handed immediately to the decoder. This is done until the decoders report finished, where the amount of linear combinations needed to decode the whole generation, and each layer for \ac{UEP} is stored. The whole process is then repeated several times to get an average, and repeated again for each value of $\mathbf{\Gamma}_1$ listed in Table \ref{tab:descriptio_comparison_setup}.

\subsection{Results}
Figure \ref{fig:test_random} summarizes the result of the test. The \ac{UEP} behavior of the implemented software matches the theoretical behavior proposed in Chapter \ref{analysisofsolutions:expandingwindows} and Figure \ref{fig:ew_analytic_dec}. The trade-off in overhead is shown in the increase of packets needed to decode the second layer, while the needed packets to decode the first layer decreases. It is concluded that the implemented software is functional with respect to the \ac{EW} method of \ac{UEP} in \ac{NC}.

\begin{figure} \centering
\subfloat[Decoding probability of the layers in a 2-layer \ac{EW} \ac{UEP} setup with $\boldsymbol \Gamma_1=0.3$.]{\label{fig:test_random_30}\includegraphics[width=1\textwidth]{figs/Gamma1_30.eps}}\\
\subfloat[Decoding probability of the layers in a 2-layer \ac{EW} \ac{UEP} setup with $\boldsymbol \Gamma_1=0.4$.]{\label{fig:test_random_40}\includegraphics[width=1\textwidth]{figs/Gamma1_40.eps}}\\
\subfloat[Decoding probability of the layers in a 2-layer \ac{EW} \ac{UEP} setup with $\boldsymbol \Gamma_1=0.5$.]{\label{fig:test_random_50}\includegraphics[width=1\textwidth]{figs/Gamma1_50.eps}}
\caption{Tests of decoding probability for the layers in an \ac{EW} \ac{UEP} setup in the implemented software. Each setup is plotted with \ac{EEP} for performance comparison. Table \ref{tab:descriptio_comparison_setup} describes the layer configurations.}
\label{fig:test_random}
\end{figure}
